1 REM ****ROX-64**** 2 REM BY JEFF MINTER 3 REM 16/09/1982 4 REM ************** 5 REM **LLAMASOFT!** 6 REM ************** 9 REM ***BLACK SCREEN+ LIMIT MEMORY*** 10 POKE53280,0:POKE53281,0:POKE56,48:CLR 19 REM***SPRITE BASES*** 20 FORX=0TO6:S(X)=192+X:NEXT X:V=53248 25 DIMSC$(10),SC(10):FORX=1TO10:SC$(X)="***[156]ROX[159]64[158]***":SC(X)=0:NEXT X 30 FORX=S(0)*64TOS(6)*64+64:POKEX,0:NEXTX 35 REM***MOTHERSHIP*** 36 FORX=0TO50:READA:POKES(1)*64+6+X,A:NEXT X:POKE2041,S(1) 37 DATA64,20,1,16,170,4,11,255,224,21,85,88,148,0,22,144,0,6,144,0,6,144,0,6 38 DATA144,0,6,144,0,6,159,255,246,4,0,16,4,0,16,16,0,4,16,0,4,64,0,1,64,0,1 39 REM***DEFINE SPRITE #0*** 40 FORX=0TO7:READA:POKES(0)*64+25+X*3,A:NEXT X 45 DATA24,62,124,255,254,126,94,8 49 REM***SPRITE #1*** 50 FORX=0TO56:READA:POKES(6)*64+X,A:NEXT X:POKE2046,S(6) 55 DATA2,0,0,2,0,0,2,0,0,20,0,0,8,16,0,20,255,0,226,0,128,4,124,64 56 DATA5,66,64,4,66,64,2,66,128,1,67,0,2,254,128,4,56,64,8,40,32,16,56,16 57 DATA16,40,16,16,56,16,56,40,56 59 REM***SPRITE #2*** 60 FORX=0TO7:READA:POKES(2)*64+25+X*3,A:NEXT X:POKE2042,S(2) 65 DATA192,224,118,56,24,20,2,0 67 FORX=0TO9:READG(X):NEXT X:DATA160,227,247,248,98,121,111,100,32,32 69 REM***SPRITE #3*** 70 FORX=0TO7:READA:POKES(3)*64+25+X*3,A:NEXT X:POKE2043,S(3) 75 DATA8,20,28,28,28,28,42,8 79 REM***SPRITE #4*** 80 FORX=0TO7:READA:POKES(4)*64+25+X*3,A:NEXT X:POKE2044,S(4) 85 DATA3,7,14,60,24,40,64,0 86 REM***EXPLOSION SPRITE*** 87 FORX=0TO7:READA:POKES(5)*64+25+X*3,A:NEXT X:POKE2045,S(5) 88 DATA66,0,4,32,0,34,128,16 89 REM***SOUND REGISTERS*** 90 VO=54296:WA=54276:AT=54277:H=54273:LO=54272:PH=54275:PL=54274:SU=54278 95 POKEVO,15:FI=0:A$="":KEY=197:POKEAT+14,32:POKESU+14,255 98 FORX=WATOWA+14STEP7:POKEX,17:POKEX,0:NEXT 99 REM***PRINT UP PLANET*** 100 GOSUB20000:PRINT"[147]":FORX=1TO18:PRINT"";:NEXT 110 PRINT"[158][185][162][185][175][185][162][185][162][175][162][185][175][185][175][164][164][162][183][183][183][183][183][146][162][185][175][175][185][164][185][175][185][164][185][185][175][164][185][175][185][175]"; 120 PRINT" [146]"; 130 PRINT"LUNAR EVA MODULE #5... LANDING SITE SCAN"; 135 FORX=0TO30:PP=1104+RND(1)*600:POKEPP,46:POKEPP+54272,1:NEXT:DA=25:PA=3:NH=0:PT=0 140 V=53248:CO=7:POKE2040,S(0):POKEV+16,0:POKEV+45,3:POKEV+21,127:AW=1 160 GOSUB5000:DF=5:CO=8:GOSUB7500 170 FORX=V+41TOV+43:POKEX,5:NEXT 180 POKEV+44,1 190 DF=DF+2:ROX=11:CO=CO-1 199 REM***ROCK INITIALISE*** 200 SX=180:SY=10:POKEV,SX:POKEV+1,SY:POKEV+39,CO:HI=0:ROX=ROX-1:IFROX=0THEN8000 210 XO=RND(1):IFRND(1)<.5THENXO=-XO 220 YO=.5:S=DF:IFS>20THENS=20 230 POKEWA,129:POKEH,200:POKELO,255:POKEVO,1:POKEV+30,0:POKEV+16,0 299 REM***MAIN MOTION LOOP*** 300 SX=SX+XO*(S/3):SY=SY+YO*S 305 IFSX>255ANDHI=0THENHI=1:POKEV+16,PEEK(V+16)+1:SX=0 310 POKEV,SX:POKEV+1,SY:IFSY>190THEN1000 315 IFFITHENGOSUB6000:IFERTHEN7000 320 S=S+.3:IFS>20THENS=20 330 POKEVO,S/2 340 IF(PEEK(V+30)AND65)=65THEN10000 400 P=PEEK(KEY):IFP<>64THEN3000 410 IF FITHENGOSUB6000:IFERTHEN7000 500 GOTO300 999 REM***DO IMPACT SURFACE*** 1000 T=SX+256*HI:SP=INT(T/8)-2:POKEV,0:POKEV+1,0:POKEV+16,0:POKEVO,15:POKEH,1 1010 POKEWA+14,0:FI=0:POKERY,0:FORZ=1TORND(1)*4:DA=DA-1:IFDA=0THEN12000 1016 GOSUB7500 1020 FORX=1TO10:POKEV+17,26:FORD=1TO10:NEXT:POKEV+17,27:POKEVO,15-(X/2) 1030 FORD=1TO10:NEXTD,X 1040 Q=1784+SP:P=PEEK(Q):IFP=32THENQ=1824+SP:P=PEEK(Q):POKEWA,0 1050 GR=0:FORX=0TO9:IFP=G(X)THENGR=X:X=10 1060 NEXT X:POKEQ,G(GR+1):NEXT Z 1100 GOTO200 2999 REM***ACTION FOR KEYS*** 3000 IFFITHEN4000 3005 IFP<>31ANDP<>28ANDP<>39THEN4000 3010 IFP<>31THEN3100 3020 MX=164:MY=170:RX=V+4:RY=V+5:XC=-1:N=4:GOTO3500 3100 IFP<>28THEN3200 3110 MX=164:MY=170:RX=V+6:RY=V+7:XC=0:N=8:GOTO3500 3200 IFP<>39THEN4000 3210 MX=164:MY=170:RX=V+8:RY=V+9:XC=1:N=16 3500 FORX=V+4TOV+9:POKEX,0:NEXT:POKERX,MX:POKERY,MY:H2=0:N=N+1 3505 POKEWA+14,129:POKEH+14,255-MY:POKEV+16,HI 3510 FI=1:GOTO410 4000 IFP=10THEN4500 4002 IFP=41THEN4700 4005 IFP<>60ORPA=0THEN410 4006 PA=PA-1:POKEWA,19:POKEVO,15:MX=SX:MY=SY 4010 FORX=1TO30:POKE53281,3:POKEH,29:POKE53281,0:POKEH,200:NEXT:GOSUB7500 4020 GOTO7000 4499 REM***ABORT MISSION*** 4500 POKEV+21,64:POKEWA,129:POKEWA+7,0:POKEWA+14,0:POKEVO,0 4505 PRINT"[150]*** M I S S I O N A B O R T E D ***" 4510 FORX=1TO15STEP.3:POKEVO,X:YY=YY-.05*X:POKEV+13,YY:NEXT X 4520 POKEWA,17:POKEWA+7,17:POKEH,32:POKEH+7,33:POKELO,YY:POKELO+7,YY+10 4530 YY=YY-.75:POKEV+13,YY:POKEH,255-YY:POKEH+7,249-YY:IFYY>6THEN4530 4540 GOTO11000 4699 REM***PAUSE FEATURE*** 4700 PRINT"[144] *** PAUSE MODE - 'P' TO RESTART ***" 4705 POKE53281,1:IFPEEK(KEY)<>64THEN4700 4710 IFPEEK(KEY)<>41THEN4710 4715 IFPEEK(KEY)<>64THEN4715 4720 POKE53281,0:PRINT" ":GOTO410 4999 REM***LEM DISPLAY*** 5000 POKEAT,32:POKESU,255:POKEAT+7,32:POKESU+7,255:POKEH,17:POKELO,3 5001 POKEVO,15:POKEWA,17:POKEWA+7,17 5002 POKEH+7,16 5005 POKELO+7,3:POKEPH,8:POKEPL,8 5010 YY=3:L=S(6)*64+13:POKEV+12,168 5020 POKEL,16:POKEL-3,16:FORX=1TO8:YY=YY+.3:POKEV+13,YY:POKELO,YY:POKELO+7,YY 5025 NEXTX 5030 GOSUB5500:IFYY>175THEN5060 5040 POKEL,0:POKEL-3,0:FORX=1TO8:YY=YY+.3:POKEV+13,YY:POKELO,YY:POKELO+7,YY 5050 NEXT X:GOTO5020 5060 PRINT" [150]RETRO THRUSTERS FIRING... "; 5062 POKEWA,129:POKEWA+7,129:POKEH,7:FORX=15TO1STEP-.08:POKEVO,X:GOSUB5500 5065 YY=YY+.04:POKEV+13,YY:NEXT X 5067 PRINT" *** PLANETFALL SUCCESSFUL *** "; 5070 POKEWA,17:POKEWA+7,0 5080 POKEVO,15:FORX=1TO5:PRINT"[150]0":POKEH,20:FORDL=1TO100:NEXT 5090 PRINT"0":POKEH,0:FORDL=1TO100:NEXT:NEXT 5100 PRINT" " 5110 FORDL=1TO1000:NEXT:PRINT"[144]METEOR SHOWER... MAN ALL ROCKET STATIONS"; 5115 POKEWA,17:FORX=1TO9:POKE53281,X:FORZ=0TO40STEP.5 5120 POKEH,Z:NEXT Z:NEXT X:POKE53281,0 5200 PRINT" ";:RETURN 5500 PRINT"[156]ALTITUDE [159]";185-INT(YY);"[157] " 5510 RETURN 5999 REM***MOVE MY ROCKET*** 6000 MX=MX+XC*8:IFMX>255THENMX=MX-255:POKEV+16,PEEK(V+16)+16 6010 MY=MY-8:IFMY<50THENPOKERY,0:FI=0:POKEWA+14,0:RETURN 6020 POKERX,MX:POKERY,MY:ER=0:POKEH+14,255-MY:POKEVO,15 6025 IF(PEEK(V+30)ANDN)=NTHEN6200 6100 RETURN 6200 ER=1:POKEWA+14,0:PT=PT+AW*100:GOTO7500 6999 REM***DO AN EXPLOSION*** 7000 POKEH,6:POKEVO,15:POKEV+1,0:POKERY,0:NH=NH+1:POKEWA,129 7005 IFHI=1THENPOKEV+16,32 7010 FORX=15TO0STEP-.3:POKEV+10,SX:POKEV+11,SY:POKEVO,X:POKEV+29,32:POKEV+23,32 7020 POKEV+10,SX:POKEV+11,SY+4:POKEVO,X:POKEV+29,0:POKEV+23,0:NEXT X 7030 POKEV+11,0:FI=0:GOTO200 7499 REM***STATUS*** 7500 PRINT"[156]SCORE:";PT;"[157] [159]PANICS:";PA;"[157] "; 7505 PRINT" [156]HIGH:";SC(1) 7506 C$="[156]":IFDA<10THENC$="[150]" 7507 X=FRE(0):REM AVOIDS GARBAGE COLLECTION 7508 IFDA=0THENPRINT" ":RETURN 7510 PRINT"[158]% DAMAGE:";C$;:FORX=1TODA:PRINT"[208]";:NEXT X:PRINT"[146] ";:RETURN 7999 REM***ATTACK WAVES*** 8000 PRINT"[144] ROX ATTACK";AW;"[157] COMPLETED!!" 8010 PRINT" BONUS OF 100 *";AW 8020 PT=PT+AW*100:POKEVO,15:POKEWA,33:FORX=0TO10:POKE53281,RND(1)*16:FORY=0TO60 8030 POKEH,Y:NEXTY:NEXTX:POKEWA,0:POKE53281,0 8040 PRINT" " 8045 PRINT" ":GOSUB7500 8050 AW=AW+1:IFAW<7THEN190 8060 GOTO15000 9999 REM***DO IN MOONBASE*** 10000 PRINT" *** MOON BASE DONE IN !! *** " 10010 POKEV+21,32:POKEWA,129:POKEH,RND(1)*254:FORX=15TO0STEP-.1 10020 POKEV+10,170:POKEV+11,180:POKEV+23,0:POKEV+29,0:POKEVO,X 10030 POKEV+10,166:POKEV+11,174:POKEV+23,32:POKEV+29,32:POKEVO,0:NEXT X 10040 POKEV+21,0:POKEWA,0:BL=1 10999 REM***ENDGAME SCORING*** 11000 PRINT"[147]YOUR SCORE WAS .. ";PT 11005 POKEWA,0:POKEWA+7,0:POKEWA+14,0 11010 PRINT"TO THIS IS ADDED A BONUS FOR YOUR";INT(NH*100/60) 11020 PRINT"PERCENT SHOOTING ACCURACY.":B1=INT((NH/60)*5000) 11030 PRINT"BONUS:";B1:PT=PT+B1 11040 IFBL=1THENBL=0:GOTO11100 11050 PRINT"AND AN ADDITIONAL BONUS- FOR FINISHING" 11060 PRINT"WITH AN INTACT MOON BASE!!" 11070 PRINT"BONUS: 5000 PTS.":PT=PT+5000 11100 PRINT"[158]YOUR FINAL SCORE WAS THUS[159]";PT 11110 FORX=0TO20:GETA$:NEXT X:Z=0:FORX=1TO10:IFPT>SC(X)THENZ=X:X=11 11120 NEXT X:IFZ=0THEN11500 11130 PRINT"ENTER TEXT FOR SCORE TABLE:"; 11140 INPUTA$:IFLEN(A$)>15THENA$=LEFT$(A$,15) 11150 IFZ=10THEN11200 11160 FORX=9TOZSTEP-1:SC(X+1)=SC(X):SC$(X+1)=SC$(X):NEXT X 11200 SC(Z)=PT:SC$(Z)=A$:FI=0 11500 PRINT"[147][158]ROX-64 ALL TIME BEST" 11510 PRINT"[156][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183]" 11520 FORX=1TO10:PRINT"[159]#";X;TAB(10);"";SC(X);TAB(23);"[158]";SC$(X) 11530 NEXT X:X=FRE(0) 11540 PRINT" PRESS 'SPACE' FOR A NEW GAME" 11550 P=PEEK(KEY):IFP<>60THEN11550 11560 GOTO100 11999 REM***MOONQUAKE!!*** 12000 PRINT" ***EXCESS SEISMIC ACTIVITY***":GOSUB7500 12010 POKEWA,129:POKEH,5:FORX=15TO0STEP-.07:POKEV+17,26:FORD=1TO10:NEXT 12020 POKEV+17,27:FORD=1TO10:NEXT:POKEVO,X:NEXT X:GOTO 10000 14999 REM***MOTHERSHIP PICKUP*** 15000 POKEV+21,66:POKEV+28,2:POKEV+37,7:POKEV+38,2:REM ENABLE MULTICOLOUR SPRIT 15005 PRINT"MISSION COMPLETED. MOTHERSHIP BONUS 5000" 15010 POKEV+23,2:POKEV+29,2:POKEV+40,4:POKEVO,15:POKEWA,33:POKEWA+7,33 15015 PT=PT+5000:GOSUB7500 15020 POKEH,2:POKEH+7,2:POKELO,1:POKELO+7,6:POKEV+3,70 15030 FORX=0TO156STEP.2:POKEV+2,X:CL=CL+.3:IFCL>15THENCL=0 15040 POKEV+40,CL:POKEV+37,15-CL:NEXT X 15060 POKEWA+14,129:FORX=15TO0STEP-.1:YY=YY-.05*(15-X):POKEV+13,YY:POKEV+38,X 15065 NEXT X:POKEWA+14,17 15070 YY=YY-.75:POKEV+13,YY:POKEH+14,200-YY:IFYY>77THEN15070 15080 POKEV+38,2:POKEWA+14,0 15090 FORX=156TO226STEP.2:POKEV+2,X 15095 YY=YY-.2:POKEV+13,YY:POKEV+12,X+12:CL=CL+1:IFCL>15THENCL=0 15096 POKEV+40,CL:POKEV+37,15-CL 15100 POKEV+3,227-X:NEXT X:GOTO11000 19999 REM***INTRO TITLES*** 20000 PRINT"[147][158][209][209][209][209] [209][209][209] [209] [209] [209][209][159][209][209][156][209] [158][209]  [209] BY" 20010 PRINT"[158][209] [209] [209] [209] [209] [209] [159][209] [209] [209]" 20020 PRINT"[158][209][209][209][209] [209] [209] [209] [156][209][209][158][209][209][209] [209][209][209][209][159][209] JEFF" 20030 PRINT"[158][209] [209] [209] [209] [209] [209] [209] [209] [156][209]" 20040 PRINT"[158][209] [209] [209][209][209] [209] [209] [209][209][209][209][209] [158][209] MINTER" 20050 PRINT"* AN ARCADE-STYLE GAME FOR COMMODORE-64*" 20060 PRINT"DEFEND YOUR LUNAR MODULE BY FIRING OFF" 20070 PRINT"ROCKETS TO INTERCEPT INCOMING METEORS." 20080 PRINT"TOO MANY GROUND IMPACTS RESULT IN AN" 20085 PRINT"EARTHQUAKE! SURVIVE 60 METEORS FOR BONUS" 20090 PRINT"AND RESCUE BY MOTHERSHIP!" 20100 PRINT"[158]CONTROLS: [159]V,B,N [158]FIRE ROCKETS. [159]SPACE BAR" 20110 PRINT"[158]ACTIVATES PANIC DESTRUCTOR. [159]A[158] TO ABORT!!" 20120 FORX=53248TO53248+16:POKEX,0:NEXT 20130 PRINT"PRESS [159]S[158] TO START GAME!"; 20140 IFPEEK(197)<>13THEN20140 20150 RETURN